package main.java.br.com.projeto.domain.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
public class OrdemServico implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -4314469862488909999L;

	@ManyToOne(fetch=FetchType.LAZY, optional=false)
	private Cliente cliente;
	
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="num_os")
	private Long numOs;
	
	@Column
	private Float valor;
	
	@Temporal(TemporalType.TIMESTAMP)
	private Date data;
	
	@Transient
	private List<ServicoOS> servicosOS;
	
	@ManyToOne(fetch=FetchType.EAGER, optional=false)
	@JoinColumn(nullable=false)
	private CondicaoPagamento condicaoPagamento;
	
	@Column
	private Float descontoValor;
	
	@Column
	private Float descontoPercentual;

	@Column
	private Status status;
	
	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Float getValor() {
		return valor;
	}

	public void setValor(Float valor) {
		this.valor = valor;
	}
	
	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public Long getNumOs() {
		return numOs;
	}

	public void setNumOs(Long numOs) {
		this.numOs = numOs;
	}

	public List<ServicoOS> getServicosOS() {
		return servicosOS;
	}

	public void setServicosOS(List<ServicoOS> servicosOS) {
		this.servicosOS = servicosOS;
	}
	
	public Float calculaValor() {
		float valor = 0L;
		for (int i=0; i<this.servicosOS.size(); i++){
			valor += this.servicosOS.get(i).getTotal();
		}
		return valor;
	}

	public CondicaoPagamento getCondicaoPagamento() {
		return condicaoPagamento;
	}

	public void setCondicaoPagamento(CondicaoPagamento condicaoPagamento) {
		this.condicaoPagamento = condicaoPagamento;
	}
	
	public void calculaTotalNota() {
		this.setValor((float) 0);

		for ( ServicoOS item : this.servicosOS )
		{
			this.setValor( this.getValor() + item.getTotal() );
		}
	}
	public void diminuiTotalNota(Float valor) {
		this.valor -= valor;
	}

	public Float getDescontoValor() {
		return descontoValor;
	}

	public void setDescontoValor(Float descontoValor) {
		this.descontoValor = descontoValor;
	}

	public Float getDescontoPercentual() {
		return descontoPercentual;
	}

	public void setDescontoPercentual(Float descontoPercentual) {
		this.descontoPercentual = descontoPercentual;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}
	
	public Float getTotalItensNota()
	{
		float valor = 0;
		for ( ServicoOS item : this.servicosOS)
		{
			valor += item.getTotal() ;
		}
		return valor;
	}	
	
}